package com.example.navigation.dto;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.List;

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class NavigationResponse {
    private int status;
    private String message;
    private int type;
    private Result result;

    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Result {
        private String restriction;
        private int total; // 路线总数
        private String navi_restype;
        private String session_id;
        private List<Route> routes;
    }

    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Route {
        private Point origin; // 起点
        private Point destination; // 终点
        private String tag; // 路线标签，如"时间少"、"距离短"等
        private String route_id;
        private int distance; // 路线距离，单位：米
        private int duration; // 路线耗时，单位：秒
        private int taxi_fee; // 预估出租车费用，单位：分
        private int traffic_light; // 红绿灯数量
        private boolean has_guidance; // 是否有语音导航
        private List<Step> steps; // 路线分段
        private int toll; // 过路费，单位：分
        private int toll_distance; // 收费距离
        private double score; // 路线评分
    }

    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Step {
        private int leg_index; // 路段索引
        private int link_num; // 路段链接数
        private String road_name; // 道路名称
        private int direction; // 方向指示，0-直行，1-左转，2-右转，3-向东，4-向南，5-向西，6-向北
        private int distance; // 分段距离，单位：米
        private int duration; // 分段耗时，单位：秒
        private int road_type; // 道路类型
        private int toll; // 分段过路费，单位：分
        private int toll_distance; // 分段收费距离
        private String adcodes; // 行政区划代码
        private List<TrafficCondition> traffic_condition; // 分段路况
        private String path; // 分段路径点，格式为"lng1,lat1;lng2,lat2;..."
        private Point start_location; // 分段起点
        private Point end_location; // 分段终点
    }

    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Point {
        private double lng; // 经度
        private double lat; // 纬度
    }
    
    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class TrafficCondition {
        private int status; // 路况状态：0-畅通，1-缓行，2-拥堵，3-严重拥堵
        private int geo_cnt; // 地理点数量
        private double distance; // 该路况下的距离
    }
} 